package org.linlinjava.litemall.db.util;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.linlinjava.litemall.db.service.LitemallDisputeService;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.*;

/**
 * 参考DFA算法demo:http://blog.csdn.net/chenssy/article/details/26961957
 */
public class BadWordUtil {
    private static final Log logger = LogFactory.getLog(LitemallDisputeService.class);

    public static String filePath = System.getProperty("user.dir") + "/dic.txt";//敏感词库文件路径
    public static Set<String> words;
    public static Map<String, String> wordMap;
    public static int minMatchTYpe = 1;      //最小匹配规则
    public static int maxMatchType = 2;      //最大匹配规则

    static {
        BadWordUtil.words = readTxtByLine(filePath);
        addBadWordToHashMap(BadWordUtil.words);
    }

    public static Set<String> readTxtByLine(String path) {
        Set<String> keyWordSet = new HashSet<String>();
        File file = new File(path);
        if (!file.exists()) {      //文件流是否存在
            logger.error("未找到敏感词文件");
            return keyWordSet;
        }
        BufferedReader reader = null;
        String temp = null;
        //int line=1;  
        try {
            //reader=new BufferedReader(new FileReader(file));这样在web运行的时候，读取会乱码 
            reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
            while ((temp = reader.readLine()) != null) {
                //System.out.println("line"+line+":"+temp);  
                keyWordSet.add(temp);
                //line++;  
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return keyWordSet;
    }

    /**
     * 检查文字中是否包含敏感字符，检查规则如下：<br>
     *
     * @param txt
     * @param beginIndex
     * @param matchType
     * @return，如果存在，则返回敏感词字符的长度，不存在返回0
     * @version 1.0
     */
    @SuppressWarnings({"rawtypes"})
    public static int checkBadWord(String txt, int beginIndex, int matchType) {
        boolean flag = false;    //敏感词结束标识位：用于敏感词只有1位的情况
        int matchFlag = 0;     //匹配标识数默认为0
        char word = 0;
        Map nowMap = wordMap;
        for (int i = beginIndex; i < txt.length(); i++) {
            word = txt.charAt(i);
            nowMap = (Map) nowMap.get(word);     //获取指定key
            if (nowMap != null) {     //存在，则判断是否为最后一个
                matchFlag++;     //找到相应key，匹配标识+1 
                if ("1".equals(nowMap.get("isEnd"))) {       //如果为最后一个匹配规则,结束循环，返回匹配标识数
                    flag = true;       //结束标志位为true   
                    if (minMatchTYpe == matchType) {    //最小规则，直接返回,最大规则还需继续查找
                        break;
                    }
                }
            } else {     //不存在，直接返回
                break;
            }
        }
        /*“粉饰”匹配词库：“粉饰太平”竟然说是敏感词
         * “个人”匹配词库：“个人崇拜”竟然说是敏感词
         * if(matchFlag < 2 && !flag){     
            matchFlag = 0;
        }*/
        if (!flag) {
            matchFlag = 0;
        }
        return matchFlag;
    }

    /**
     * 判断文字是否包含敏感字符
     *
     * @param txt       文字
     * @param matchType 匹配规则 1：最小匹配规则，2：最大匹配规则
     * @return 若包含返回true，否则返回false
     * @version 1.0
     */
    public static boolean isContaintBadWord(String txt, int matchType) {
        boolean flag = false;
        for (int i = 0; i < txt.length(); i++) {
            int matchFlag = checkBadWord(txt, i, matchType); //判断是否包含敏感字符
            if (matchFlag > 0) {    //大于0存在，返回true
                flag = true;
            }
        }
        return flag;
    }

    /**
     * 替换敏感字字符
     *
     * @param txt
     * @param matchType
     * @param replaceChar 替换字符，默认*
     * @version 1.0
     */
    public static String replaceBadWord(String txt, int matchType, String replaceChar) {
        String resultTxt = txt;
        Set<String> set = getBadWord(txt, matchType);     //获取所有的敏感词
        Iterator<String> iterator = set.iterator();
        String word = null;
        String replaceString = null;
        while (iterator.hasNext()) {
            word = iterator.next();
            replaceString = getReplaceChars(replaceChar, word.length());
            resultTxt = resultTxt.replaceAll(word, replaceString);
        }

        return resultTxt;
    }

    /**
     * 获取文字中的敏感词
     *
     * @param txt       文字
     * @param matchType 匹配规则 1：最小匹配规则，2：最大匹配规则
     * @return
     * @version 1.0
     */
    public static Set<String> getBadWord(String txt, int matchType) {
        Set<String> sensitiveWordList = new HashSet<String>();

        for (int i = 0; i < txt.length(); i++) {
            int length = checkBadWord(txt, i, matchType);    //判断是否包含敏感字符
            if (length > 0) {    //存在,加入list中
                sensitiveWordList.add(txt.substring(i, i + length));
                i = i + length - 1;    //减1的原因，是因为for会自增
            }
        }

        return sensitiveWordList;
    }

    /**
     * 获取替换字符串
     *
     * @param replaceChar
     * @param length
     * @return
     * @version 1.0
     */
    private static String getReplaceChars(String replaceChar, int length) {
        String resultReplace = replaceChar;
        for (int i = 1; i < length; i++) {
            resultReplace += replaceChar;
        }

        return resultReplace;
    }

    /**
     * 将我们的敏感词库构建成了一个类似与一颗一颗的树，这样我们判断一个词是否为敏感词时就大大减少了检索的匹配范围。
     *
     * @param keyWordSet 敏感词库
     * @author yqwang0907
     * @date 2018年2月28日下午5:28:08
     */
    @SuppressWarnings({"unchecked", "rawtypes"})
    private static void addBadWordToHashMap(Set<String> keyWordSet) {
        wordMap = new HashMap(keyWordSet.size());     //初始化敏感词容器，减少扩容操作
        String key = null;
        Map nowMap = null;
        Map<String, String> newWorMap = null;
        //迭代keyWordSet
        Iterator<String> iterator = keyWordSet.iterator();
        while (iterator.hasNext()) {
            key = iterator.next();    //关键字
            nowMap = wordMap;
            for (int i = 0; i < key.length(); i++) {
                char keyChar = key.charAt(i);       //转换成char型
                Object wordMap = nowMap.get(keyChar);       //获取

                if (wordMap != null) {        //如果存在该key，直接赋值
                    nowMap = (Map) wordMap;
                } else {     //不存在则，则构建一个map，同时将isEnd设置为0，因为他不是最后一个
                    newWorMap = new HashMap<String, String>();
                    newWorMap.put("isEnd", "0");     //不是最后一个
                    nowMap.put(keyChar, newWorMap);
                    nowMap = newWorMap;
                }

                if (i == key.length() - 1) {
                    nowMap.put("isEnd", "1");    //最后一个
                }
            }
        }
    }


    public static void main(String[] args) {
        Set<String> s = BadWordUtil.words;
        Map<String, String> map = BadWordUtil.wordMap;

        System.out.println("敏感词的数量：" + BadWordUtil.wordMap.size());
        StringBuilder string = new StringBuilder("邓小平（1904年8月22日－1997年2月19日），原名邓先圣[9]:17，由启蒙老师在法国留学时改名邓希贤[10]:8，1927年正式改名为邓小平，是中华人民共和国历史上的第二代最高领导人[11]。\n" +
                "\n" +
                "邓小平1904年出生于中国四川省广安州协兴乡牌坊村[注 1][12]:93-94，祖籍江西吉水，在法国勤工俭学期间经周恩来、赵世炎等人介绍和影响下加入了旅法共产主义小组，1924年转为中国共产党党员。1926年初到苏联莫斯科中山大学学习。邓小平的政治生涯经历了“三落三起”。第一次国共内战期间参与广西、江西等地对国民党的武装斗争，1931年因支持毛泽东路线被撤职，1935年遵义会议前后被中共中央重新启用。1938年起与刘伯承一起领导129师、第二野战军等部队参与了抗日战争和第二次国共内战。中华人民共和国成立后，1954年出任中国国务院副总理；同年起兼任中共中央秘书长，直至1956年中共八大后改任中共中央政治局常委、中央书记处总书记，期间参与了对高岗和饶漱石的斗争，1957年还参与了反右运动并扮演重要角色。[13]文化大革命初期作为中共党内仅次于国家主席刘少奇的第二号走资派被撤销党内外一切职务，保留党籍；其子邓朴方因批斗而半身瘫痪，他本人也被软禁在江西。毛泽东的接班人林彪死后，邓小平于1973年第二次复出政坛，再次出任国务院副总理，协助总理周恩来工作。而后因其整顿文革混乱引发毛泽东和“四人帮”不满，在1976年四五事件后再次被撤销所有职务，保留党籍；毛泽东死后，于1977年中共十届三中全会中第三次复出政坛，任中共中央副主席、国务院副总理、中央军委副主席和解放军总参谋长等党政军职务，合称三副一长。\n" +
                "\n" +
                "1978年12月，邓小平在中共十一届三中全会上确立领导地位，取代华国锋成为中国实际上的最高领导人。1978年至1983年，任全国政协主席；1981年至1989年，任中国共产党中央军事委员会主席；1982年至1987年，任中国共产党中央顾问委员会主任；1983年至1990年，任中华人民共和国中央军事委员会主席。1970年代末至1980年代初，邓小平恢复全国高考、主导拨乱反正、提出改革开放、发动中越战争、废除领导终身制、倡导计划生育、推行义务教育，但反对资产阶级自由化[14]；1982年主持重新修订了《中华人民共和国宪法》，而《八二宪法》也是中华人民共和国的第四部宪法和现行的宪法，突出了宪政主义的精神和思想[15][16][17][18][19]。1985年，他主导了解放军的百万大裁军；1986年，他启动了中国高新技术发展的“863计划”，并试图再度推动中国政治体制改革、但最终因1989年六四事件的爆发而失败；1992年初，邓小平南巡，使得中国的改革开放重新提速。\n" +
                "\n" +
                "1997年2月19日，邓小平在北京逝世，享年92岁，同年3月2日其骨灰撒入大海[20]。邓小平一生未担任中国国家元首、中国政府首脑或中共最高领导职务，但从1978年12月（中共十一届三中全会）至1989年11月辞去中共中央军委主席（中共十三届五中全会）一职前，普遍认为他是中国实际的最高领导人，并写入《中国共产党章程》予以确认。[21]中国共产党称他为“改革开放的总设计师”，称以其部分政治理念为核心的政治理论为“邓小平理论”，作为党和国家的指导思想和中国特色社会主义理论体系的第一部分，具体包括“改革开放”、“四项基本原则”、“一国两制”等。邓小平的政策影响了20世纪后期的每个中国人，也在相当程度上改变了世界，他推动的改革还缔造了新兴超大城市深圳市。他于1978年和1985年两次被美国《时代》周刊选为“年度风云人物”[22][23]；却也因为未能彻底清算文革以及六四事件而受到争议，后者甚至一度被认为是其晚年的污点[24][25][26]。" +
                "早年生涯\n" +
                "清光绪三十年（1904年）8月22日，邓生于中国四川省广安州[注 1]协兴乡牌坊村[10]:13（今广安市广安区协兴镇牌坊村）的一个家庭[12]:93-94[10]:8，是长子[27]:9。\n" +
                "\n" +
                "邓氏亲族邓时敏曾任担任朝廷要员，位至大理寺正卿[28]:17。\n" +
                "\n" +
                "邓1909年开始读书，先进私塾发蒙[29]:1。六岁转入协兴镇一家较大之私塾[28]:18。1911年转入新式小学读书[29]:1。11岁那年考入广安县高级小学[28]:18。1918年高级小学毕业[27]:11。14岁时邓考入广安县初级中学[28]:18。\n" +
                "\n" +
                "1919年春天，邓15岁，与只比他大3岁的族叔邓绍圣一起离开广安[10]:16,22，到重庆汪云松筹建的一所赴法留学预备学校就读[9]:21，邓是当时班上年龄最小的学员[10]:14。五四运动后，邓同全校同学一起参加抵制日货活动，他当时只有“工业救国”思想，希望能到法国去一面做工、一面求学，学点本事回国[29]:2。1920年夏在重庆留法预备学校毕业[29]:2。经过18个月的努力学习，在1920年9月上旬邓和其他378名学员乘船沿长江到达上海准备赴国外勤工俭学[10]:27-28。10月19日[28]:20，抵达法国马赛[29]:2。\n" +
                "\n");
        string.append("旅欧生涯\n" +
                "\n" +
                "16岁时的邓小平\n" +
                "参见：中国共产党、第一次国共合作和莫斯科中山大学\n" +
                "邓个子矮小，却在这批留学生中被选为领导人，在旅途中表现出了出众组织能力[9]:24。1920年10月19日，邓与叔父邓绍圣乘船抵法国马赛[27]:12，短暂停留后到达巴黎[30]:1-4。邓在法国非常奔波忙碌，生活很少安稳，而且常常没有工作，经济非常拮据。邓在法国第一个居住地，是卡昂以西的小城巴约[9]:25。他在法华教育协会开办的一个法语训练班学了3个月法语。在法华教育协会安排下，以邓希贤名字到诺曼底巴耶男子中学就读[27]:12。\n" +
                "\n" +
                "1921年3月13日，邓和18位勤工俭学之同胞离开巴耶[28]:20。春，邓在布列塔尼之贝页中学语言进修班学习，后来到巴黎附近之工厂做工，住在拉加朗——科隆伯城[29]:2。4月初，他与叔父到克鲁索施耐得钢铁厂（Schneider & Company Iron and Steel Complex）做工，开始4年劳工生涯，当时邓只有16岁，只能当学徒工，每天工资只有10法郎，生活拮据，连饭都吃不饱[27]:12。由于缺钱，他工作3周[9]:26。在这里，他掌握钳工技术，后来在文化大革命中再次派上用场[31]:124。他做1个月苦工后辞职，靠领救济金（每天5法郎）过了5个月[27]:12。他在这里初步认识法国的无产阶级，并结识一些中国共产主义者。之后又做过饭馆招待和火车司机副手，期间一直住在拉加雷讷克隆布[32]:5。1922年2月14日，邓到沙莱特的哈金森橡胶厂制作胶鞋[33]:77-78，在蒙塔尔吉当体力工人[29]:3，一天做20多双鞋，赚15、6法朗，做9个月[27]:12。期间，他上过夜校，以及蒙塔日学校[34]:26。10月17日，他辞去工作。同年秋天，入夏蒂荣中学学习[29]:3。学习4个月法语后，又回到原来的工厂工作。根据这个工厂领导评价，此时邓显露出倔强和反抗精神[33]:77-78。这段经历对于他意义重大。1985年，他派儿子邓朴方拜访此地。1923年2月，邓在赫金森橡胶厂当雇员[29]:3。3月7日，他因拒绝工作而被工厂开除，失业几个月后他去了巴黎。6月，在比扬古雷诺汽车厂做工[29]:3。1925年底，他进入雷诺汽车厂工作，学习钳工技术[27]:12。\n" +
                "\n" +
                "\n" +
                "邓小平在法国哈金森橡胶厂的就业卡\n" +
                "1922年，邓在巴黎勤工俭学期间加入中国少年共产党（简称少共，后改为中国社会主义青年团旅欧支部[29]:3），并为少共出版刊物《少年》担任编辑，与李大章一同负责刻蜡板[27]:14。邓在周恩来丶赵世炎等人介绍下加入少共，因而和周成为终生好友，而周晚年时更为他铺路协助他推动改革开放。8月1日，旅欧中国少年共产党机关刊物《少年》创刊[29]:3。1923年，少共改名旅欧中国共产主义青年团[27]:14。2月，邓参加旅欧中国少年共产党临时代表大会，大会正式宣布自己是“中国社会主义青年团”之一部分；周当选为总书记[28]:21。6月11日后，邓去巴黎，在旅欧共产主义组织里工作，在周领导下之支部干杂活，主要工作是印刷该团体一份10页纸之小报[28]:22。作为共产主义者，他开始从政[9]:29。1923年6月，中共宣布加入孙中山领导之中国国民党，法国之中共党员也立刻宣布会加入旅法之中国国民党；邓也加入中国国民党，并在1925年成为中国国民党欧洲支部之领导人之一[28]:22-23。秋，中共旅欧支部召开第二次代表大会，决定将机关刊物《少年》改为《赤光》[29]:3。杂志宣称要反对军阀统治和帝国主义，读者对是留法中国学生[28]:22。\n" +
                "\n" +
                "1924年，《少年》改名《赤光》，由周负责编辑、发行和主要撰稿；邓以“希贤”等笔名写文章，并负责刻蜡板和油印[27]:14。下半年，邓加入中国共产党，并担任青年团旅欧支部领导工作[29]:4。随后，邓进入杂志《赤光》编辑组[9]:30。邓在支部书记周领导下工作[28]:22。在此结识了主编周[34]:27[35]:348。邓主要负责印刷，并参与宣传工作。所有文章都由他刻在蜡纸上再进行油印，使他得了绰号“油印博士”[9]:30[32]:5[36]:14。后来，左倾革命者与中国青年党论战，邓发表文章参与这次争论[37]:21。在1924年7月会议上，按照中共之决定，旅欧中国共产主义青年团执委会包括邓在内之全部成员，自动成为中共党员[28]:22。\n" +
                "\n" +
                "1925年春天，邓在法国里昂做工，受党组织委派担任中共里昂区党特派员，领导里昂地区之党团工作和华工运动[29]:4。同年秋天，邓成为新当选的中国共产党旅欧支部负责人傅锺的助手[34]:27。时值第一次国共合作，邓出任中国国民党内代表共产主义者的监督代表。1925年五卅惨案，邓和旅法之中国学生一起抗议法国政府与镇压学生之中国政府沆瀣一气[28]:23。6月21日，他们冲击中国驻法使馆，并逼迫大使在抗议信上签字。包括邓在内留下的人，都受到法国警察严密监视[9]:30[38]:18-21。邓等受法国警方监视并有被捕之虞[27]:12。年底，参与示威之中国学生之上层领袖被驱逐出境，邓在组织内发表主要演讲并主持会议[28]:23。\n" +
                "\n")
                .append("1926年1月7日，邓根据中央指示离开法国，前往苏联[9]:31，上车时接到法国警方驱逐令[27]:12。邓旅法5年，爱上吃土豆、奶酪、牛角面包，爱喝法国葡萄酒和咖啡，并爱上看足球，曾有一次花5法郎（1天饭钱）买一张最便宜门票看足球比赛[27]:13。\n" +
                        "\n" +
                        "1926年1月17日，邓抵达莫斯科，两周后进入中山大学一班[28]:234。邓起了个俄文名字“多佐罗夫”（Дозоров）[39]:25，到专门培养中国革命者的莫斯科中山大学学习[33]:118-126，其中一个“理论家小组”，云集国共两党学员，包括中国共产党党员邓和中国国民党党员谷正纲[27]:13。此外，当时在莫斯科同学有蒋介石的儿子蒋经国[40]:215，不过他与邓不同班[27]:13。邓在这里学习了俄语、历史、哲学、政治经济学以及列宁主义和军事学。邓专心读书，钻研马列主义基本理论[29]:5。因为刻苦钻研、敢言善辩的作风，邓又被同学们戏称为“小火炮”[33]:114。9月16日，根据中共中央的指示，邓陪同访问苏联的冯玉祥将军返回中国[41]:343-345[34]:28。1926年底，邓奉命回国参加革命活动[27]:13。\n" +
                        "\n" +
                        "渐露锋芒\n" +
                        "参见：国共内战、八七会议、百色起义和龙州起义\n" +
                        "1926年11月28日，随着北伐节节胜利，冯玉祥攻下西安。\n" +
                        "\n" +
                        "1927年春，邓由苏联途经蒙古回到中国[29]:5。1月12日，邓和其他20名年轻共产主义政治教导员一起，被共产国际派往冯玉祥那里[28]:25。回国后，邓奉命同冯玉祥到内蒙古，并在冯玉祥手下担任第七团政治委员[41]:343-345。邓在西安由冯玉祥成立军事学院担任教学工作[42]:77-79。2月，中山军事政治学校在西安成立，中国共产党员史可轩为校长，邓为政治部主任，刘志丹等担任教官[43]:2637。3月，接受分配到西安，在中山军事学校工作，担任政治处处长兼政治教官，并任该校中共党组织书记，学校隶属冯玉祥国民联军总部，实际上由刘伯坚等几位中国共产党人筹建[29]:5。6月徐州会议后，冯玉祥追随蒋介石反共，将邓等遣送别处[43]:2637。7月间史可轩带领千余人离开西安，该校宣告结束[43]:2637。\n" +
                        "\n" +
                        "1927年4月，第一次国共合作破裂[28]:25。6月，因中国政局发生突变，冯玉祥下令要所有在他部队工作之共产党员集中到开封，名曰训练，其实是“礼送出境”，邓根据党组织安排，离开西安转赴当时中共中央所在地汉口，留在中共中央工作，担任秘书，不久武汉政府公开反共，中国共产党转入地下，为适应秘密环境，从这时起改名为邓小平[29]:6。7月8日邓返回武汉到中共中央机关工作，“邓小平”的名字正是在这时改的[42]:60-62[34]:28。8月7日，中共中央在汉口召开中央紧急会议——八七会议，邓担任书记员并负责处理会议文件[28]:26，从事会务工作[44]:187-199[45]。邓作为中央秘书列席中共中央在汉口召开紧急会议（即八七会议），会议批判陈独秀右倾投降主义，总结大革命失败经验教训，确定土地革命和武装反抗中国国民党之总方针[29]:6。同年底，中共中央秘密迁到上海后，邓担任中共中央秘书长，主要管理中央机关文书、机要、交通、财务等工作[29]:6。1928年，邓作为中共中央秘书长，在国内协助李维汉、任弼时处理中央日常工作[29]:7。至1929年夏，他在上海从事地下活动。\n" +
                        "\n" +
                        "1928年6月底，邓被选为中国共产党中央书记处副书记，帮助新的中共中央书记向忠发工作[42]:82-92。由于邓从来不引人注目，而且很快就学会上海话，因此成为地下活动理想接头人[34]:29。9月，在上海，邓与张锡瑷介绍张晓梅正式加入中国共产党，张晓梅被分配在党中央机关工作，为中央职工部整理材料，并担任中央翻译科之机要交通[29]:7。是年冬，邓在上海与中共党员张锡媛结婚[1]:218[2]:27。邓和张锡媛跟周恩来和邓颖超夫妇成为邻居，一起从事地下工作[28]:26。\n" +
                        "\n" +
                        "1929年7月，中共中央决定，派邓为中央代表，到广西与俞作柏、李明瑞接洽，做统战工作，并全面领导广西党工，准备武装起义，在龚饮冰陪同下，由上海到香港，听取广东省委军委书记聂荣臻介绍情况，然后到南宁，是邓开始独立担负一个地区领导重任[29]:7-8。邓以中共中央副秘书长身份，化名“邓斌”从上海乘船到香港，又赶赴海防，由陆路潜入广西省[46]:24。在南宁，邓以党中央代表身份做俞、李工作，一方面以秘密方式同广西党组织负责同志联系，传达党中央指示；另一方面以半合法地位做好俞、李工作，使俞、李任用不少中国共产党员、共青团员和进步人士[29]:8。邓奉命到广西右江和左江地区建立苏维埃根据地，积极参与与张云逸、韦拔群等人领导百色暴动政治活动[34]:30。由于中央和广东省委受左倾情绪影响，对邓在广西与俞作柏、李明瑞合作不相信也不放心，几次发指示信提出批评，但是邓坚持从广西实际出发，认为俞、李与蒋、桂矛盾完全可以利用[29]:8。9月1日，邓在南宁主持召开广西省第二次党代表大会，决议“武装农民、推翻国民党政权、建设工农民主政权、创立工农红军”[46]:25。10月1日，俞、李率部出发\uD848\uDDCC，邓调遣部队作应变：通知警备第四大队派一个营先去右江地区，警备第五大队派一个营先去左江地区；派雷经天等去右江，何健南等去左江[29]:8-9。10月初，中共党组织按照预定计划，将留守南宁部队拉到左、右江地区[46]:26。邓指示张云逸以南宁警备司令名义接管省军械库，并征集船只，以备一旦有变，即把军械库几千支枪和弹药装船外运；又令在南宁受训之韦拨群农军营赶回东兰，准备起义；并派龚饮冰去上海向中央汇报行动计划[29]:9。10月17日，邓、陈豪人等带着警卫部队，指挥船队溯右江驶向百色，张云逸率警备第四大队和教导总队从陆路掩护前进[29]:9。一到百色，作为中共中央代表，邓宣布成立“前敌委员会”，决定发动百色起义[46]:26。邓被任命为中共广西前敌委员会书记[29]:9。11月初，中央电召邓回上海[29]:10。邓在左江龙州对龙州暴动做了布置后，前往上海向中共中央汇报工作[47]。在邓离开期间，陈豪人、张云逸、李明瑞、俞作豫等分别于1929年12月11日和1930年2月1日发动百色起义和龙州起义，建立左江和右江两块根据地，创立中国工农红军第七军、第八军[42]:110。12月11日，“中国工农红军第七军”在百色县城广场集结，宣布成立[46]:26。同时，在左江宣布成立苏维埃政府，张云逸和邓分别就任红七军司令员和政治委员[46]:26-27。12月上旬，邓从龙州动身，中旬到香港，在香港参加中央军委召开之“对广西红军工作布置的讨论”会，在会上作“补充报告”[29]:10。1930年2月1日，邓在龙州领导右江起义，成立“中国工农红军第八军”[46]:27。俞作豫任军长，邓兼政治委员，李明瑞任第七军和第八军总指挥[29]:11。年初，邓回到上海，妻子张锡媛于1月因难产而病故[46]:26-27。2月7日，邓从上海回到龙州，电告红七军停止攻打南宁，命红八军撤回龙州[29]:11。邓与袁振武将红八军余部数百人带至右江与张云逸等领导红七军合并。10月，中共中央代表邓岗推行“立三路线”，到达右江传达命令，要红七军主力7000余人攻打柳州、建立广东北小江根据地、阻止国军北上[46]:27。10月17日，中共中央政治局会议决定：由项英、毛泽东、任弼时、朱德、彭德怀、叶剑英、邓中夏、曾中生、邓、周恩来、刘伯承、恽代英、李富春等25人组成苏区军委[29]:13。红七军在战斗中损失严重，决定放弃攻打柳州，为保存实力，绕过柳州、桂林，转战在粤赣湘桂边界地区[46]:27-28。11月，红七军和红八军合编为红七军，奉命北上，此后转战桂、粤、赣、湘边境[29]:14。经约10个月苦战，终于在1931年7月到达目的地与中央红军会合[46]:28。7月，中央将红七军调到中央根据地，红七军与中央红军会合，编入红三军团[29]:15。红七军进入江西时，只剩下2个团不足2000人[48]:143。强渡乐昌河时，邓和张云逸被国民党军截断，邓带领先头团于1930年底到达江西崇义。作为前委书记，邓打算再次回上海向中央汇报，得到另两名前委许卓和李明瑞的支持。在崇义，红军遭国民党军猛攻，邓与许卓商定，由许代理前委书记并带领部队寻机前往井冈山，邓则去上海汇报[47]。三十多年后，邓在文革期间自我检讨时承认，在1931年初部队被分割的危急情况下，作为主要负责人，他不应该离开，“尽管这个行为在组织上是合法的，但在政治上是极端错误的”，是他“历史上最大的错误之一”[49][47][50]。\n" +
                        "\n" +
                        "第一次下台\n" +
                        "参见：中华苏维埃共和国、遵义会议、长征和中央红军\n" +
                        "\n")
                .append("邓小平的第二任妻子金维映\n" +
                        "1931年8月，邓担任中共江西瑞金县委书记[29]:15，同时兼管党在寻乌县和安远县之工作[28]:28。刚到任就凭其出色调解能力和裁决能力，平息当地政治迫害性质肃反运动[34]:34[51]:50-83[2]:46。不久，瑞金成为中华苏维埃共和国首都，邓离开了党委书记职位，成为军委总政治部秘书长[34]:34。\n" +
                        "\n" +
                        "1932年初，他被派到会昌担任县委书记，很快在那里扩展中国共产党组织[34]:34。随后又担任中共江西省委第一书记。邓积极推行毛泽东“富农路线”，组织地区武装力量，是当时党内毛泽东支持者之一[52]:290[2]:41-42。邓对毛产生极大崇敬[28]:28。1932年夏天，邓第二次结婚，与在会昌认识的金维映结婚[2]:24。冬，邓任会昌中心县委书记，领导会昌、寻乌、安远三县工作，半年后又调任江西省委宣传部长[29]:16。\n" +
                        "\n" +
                        "\n" +
                        "1936年2月，红一军团、红十五军团部分领导干部在陕西淳化合影。前排左起：王首道、杨尚昆、聂荣臻、徐海东。后排左起：罗瑞卿、程子华、陈光、邓小平\n" +
                        "1933年，邓第一次被打倒。4月15日，中共苏区中央局主办《斗争》报发表《罗明路线在江西》一文，批判邓、毛泽覃、谢唯俊、古柏[29]:16-17。邓受中共内部王明派打击和批判[27]:14。李维汉等极左势力抨击罗明、邓小平政治路线，实质是批评毛泽东战略方针，历史上称之为“邓（邓小平）、毛（毛泽覃）、谢（谢维俊）、古（古柏）”事件[34]:34[53]:154。此后，邓被一步步剥夺权力，从省党委书记被撤职[54]:12。邓被撤销中共江西省委宣传部长之职，调到红军总政治部，主编总政治部机关报《红星》[27]:14。并迫于压力，做出自我批评，被关进拘留所[55]:67。邓受到严厉指责，被称为“毛派头子”，甚至邓第二任妻子金维映也加入批判邓[28]:28。此时金维映提出离婚，随后改嫁于李维汉[2]:98[34]:20。邓派到边远乐安县属南村区委当巡视员[29]:17。半个月后又被调回红军总政治部[54]:12。时任江西省委书记李富春，在邓下放几个后把邓叫回来，委任为江西省委宣传干事[28]:28-29。\n" +
                        "\n" +
                        "在第五次反围剿中，中国国民党把中国共产党赶出根据地[28]:29。1934年10月21日，中央红军开始长征，邓参加长征[29]:18。长征初期，邓负责《红星报》编辑出版[56]:18-20。年底，邓第二次出任中共中央秘书长[29]:19。长征给中共造成重创，从江西出发时军队大约86,000人，很多人死在路上，还有一些人开小差，1935年10月到达陕甘宁边区时只剩下不足10,000人；据邓之女儿说，随着部队日益减员，邓在长征途中负责宣传以维持纪律，有不少机会与毛交谈[28]:29。\n" +
                        "\n" +
                        "1935年1月，在毛泽东、周恩来推荐下[34]:19，邓参加贵州省遵义县城召开中央政治局扩大会议，邓作为书记员得以出席会议[28]:29，当选为中共中央秘书长和中央红军总政治部副主任[57]:310。这次会议后，邓正式复出。4月，邓被派到红一方面军主持宣传部工作，中央纵队秘书长职务交给刘英。5月12日，邓出席在四川省会理县城郊召开之中共中央政治局扩大会议[29]:19。6月，邓任红一军团政治部宣传部长[29]:19。在党内发生张国焘分裂事件后，彭德怀、邓承担红军右路军主要指挥工作[58]:97。10月29日，长征部队到达陕西北部时，邓患上严重疟疾[58]:97，后因张学良调拨药品及物资帮助才得以摆脱生命危险[59]:360。1936年2月5日，邓随红一方面军东征[29]:20。5月，邓任红一军团政治部副主任，后任主任[29]:20。邓曾亲自编写一军团许多重要材料和《战士报》社论[27]:14。\n" +
                        "\n" +
                        "抗日战争\n" +
                        "\n" +
                        "1938年1月，邓小平任八路军129师政治委员。这是129师领导人在山西辽县（今左权县）桐峪镇合影。左起：李达、邓小平、刘伯承、蔡树藩\n" +
                        "主条目：中国抗日战争\n" +
                        "参见：第二次国共合作、129师、晋冀鲁豫野战军、抗日根据地、百团大战、上党战役、中共中央北方局、淮海战役和渡江战役\n" +
                        "1936年12月，军阀张学良发动“西安事变”囚禁蒋介石总司令，给中国共产党带来良机；蒋为使自己获释，被迫同意开始第二次国共合作，共同抗日；邓在延安作为第一军团宣传部长领导文工团，并通过演讲教育军政干部[28]:29-30。1937年7月7日，芦沟桥事变发生，全国抗日战争开始[29]:20。8月9日，周恩来、朱德、叶剑英、邓赴南京参加蒋召开之最高国防会议，同时进行国共谈判[29]:20。中国共产党同意与中国国民党结成抗日统一战线后，其军队被改编为“第八路军”，成为全中国军队之一部分，形式上接受蒋之统一指挥[28]:30。根据第二次国共合作双方协议，8月22日中国工农红军改编为国民革命军第八路军，邓任八路军总政治部副主任，与周恩来等，到太原搞统一战线工作[60]:51-52。9月，邓奉周派遣，以八路军政治部和动委会名义赴五台山动员蒲路东，正太铁路北各县民众装起来发展游击战争[29]:22。9月下旬，第二战区民族革命战争战地总动员委员会（简称动委会、战委会）在太原成立，动委会是周、彭德怀同阎锡山商谈决定建立，续范亭任主任委员，邓、南汉宸、彭雪枫等参加领导工作[29]:22。9月23日，朱德、任弼时、邓、左权率领八路军总指挥部驻进五台县南茹村[29]:22。10月，邓、傅锺、韦国清率八路军总政治部一部分同志到山西孝义县，开辟晋西地方工作；邓召开会议布置扩军、筹粮筹款和帮助地方建党建政等，同时派干部帮助县牺盟会训练抗日自卫队、建立抗日游击队，组建“八路军晋西游击支队”，不久从统一战线大局出发，改名为“牺盟晋西游击支队”[29]:22-23。1938年1月5日，中共中央军委决定邓接替张浩任第129师政治委员[29]:24，与师长刘伯承一起抗日[60]:400[34]:6。邓任第一书记，刘伯承任第二书记，使邓权力更大，有权判断部队战前政治准备和周围环境[28]:30。1月18日，到达129师任职视事[29]:24。随后13年，邓和刘伯承一直并肩战斗[61]:185-189，129师和晋冀鲁豫野战军（即第二野战军、中原野战军），后来被称为“刘邓大军”而留名史册[62]:70。刘伯承有善待部下之名声，邓则对部下要求甚严，打起仗来不顾一切；在处决怀疑给中国国民党做奸细之士兵时，刘伯承也要比邓更慎重[28]:30。\n" +
                        "\n" +
                        "比起毛在延安远离敌人，有时间研究党之理论和全局性战略，又有闲暇畅游于历史、哲学和诗词当中；邓政委住在太行山区，更接近日本人前线，几乎没有时间研究理论，邓得担起实际责任，处理和居民有关之各种问题[28]:31。1938年1月7日，邓在洪洞参加北方局和集总（八路军番号为第十八集团军，故八路军总部简称“集总”）召开之中央军委华北军分会会议[29]:24。实际上，邓在八年抗战时期为山西太行山区之最高政治领导人[28]:31。2月6日，邓在辽县主持召开129师团以上干部会议[29]:24。2月25日，邓和徐向前副师长到拐儿村参加集总召开会议[29]:25。4月26日，邓与刘伯承等送徐向前去河北南部开辟冀南军区，发展平原游击战争[29]:26。邓要建立自给自足之经济，为当地数万居民和部队提供足够之口粮，同时还要生产足够之经济作物，并使当地工业能够生产出足够之布匹和其他日用品；邓还要为正规军征募兵员，评估军事行动之政治意义；邓设计一种鼓励当地生产之税收制度：“向老百姓征税要根据当地最近几年的平均收成，超出这一平均数的部分完全归生产者所有。”[28]:31。\n" +
                        "\n" +
                        "1938年，刘邓二人率军在河北南部平原地区开辟抗日根据地[63]:250，1至9月，刘邓二人共创“麻雀战术”卓有成效[64]:242。7月16日，邓与徐向前、宋任穷等会见美国驻华大使馆海军武官伊·福·卡尔逊，向他介绍冀南抗日情况[29]:26。当时来访的美国海军少校、驻中国国共军队运动观察员伊·福·卡尔逊评论邓：“是一个矮小、健壮和健谈的人，他对事物的理解就像芥末那样锐利（as keen as mustard）。”[10]:907月28日，邓亲自领导冀南抗日武装整编[29]:26。8月14日，邓指导冀鲁豫边区省委召开各地县代表会议，将冀南军政委员会改选为冀南行政主任公署，杨秀峰任主任，宋任穷任副主任；8月25日，离开冀南[29]:27。9月29日至11月6日，邓出席中共中央在延安召开之扩大六届六中全会，并在会上报告地方工作[29]:27。11月9日，中共中央政治局发出《关于北方局及分局委员的通知》，决定：以朱德、彭德怀、杨尚昆、聂荣臻、关向应、邓、彭真、程子华、郭洪涛为北方局委员，杨尚昆兼北方局书记[29]:27。12月7日，中共中央书记处会议决定：全国我军中党务委员会由王稼祥、朱德、彭德怀、谭政、项英、陈毅、聂荣臻、邓、关向应、程子华、林彪、刘伯承、贺龙、萧劲光等26人组成[29]:27-28。\n" +
                        "\n" +
                        "\n" +
                        "1941年的邓小平\n" +
                        "从1937年到1945年，刘邓开辟了晋冀鲁豫根据地，邓任根据地党委第一书记。他主张宣传中国共产党思想[65]:99，推行地主“减租减息”、农民“交租交息”等政策，以团结一切可能的抗日力量[34]:42。1939年7月，邓参加中共中央政治局扩大会议[29]:29。8月，同卓琳在延安结婚[29]:30。卓琳曾就读于北京大学物系，曾说过邓在大多数共产党干部中是个出类拔萃者[28]:31。9月，邓第三次结婚，妻子是卓琳，也是他最后一次婚姻[10]:89。卓琳（本姓浦）是云南人，出身富商家庭，抗战后从北平奔赴延安求学，在延安与邓结识[3]:22-23。\n" +
                        "\n")
                .append("八九民运及六四天安门事件\n" +
                        "参见：六四事件和四二六社论\n" +
                        "1989年春天，中国出现社会动荡[61]:271-272。4月15日，胡耀邦逝世，北京学生藉悼念胡耀邦分别向人大代表及总理李鹏提出政治理想和要求，学潮再起，并迅速蔓延到西安、长沙等大城市[113]:169。4月16日，大约800名学生游行到天安门广场，在广场中央之人民英雄纪念碑前向胡耀邦敬献花圈；警察并未干预从大学前来悼念者[28]:538-539。4月19日晚、20日凌晨，数百名学生喊着口号、唱着国际歌，冲击中南海新华门，并打伤警卫战士，当时围观者近万人。这便是当年的“四二零”事件。4月22日，胡耀邦官方悼念会举行，赵紫阳、邓、杨尚昆等全体中国高层领导人出席[159]:232-233。运动遂向社会蔓延，形势急转直下[113]:169。\n" +
                        "\n" +
                        "4月24日，即在赵紫阳出访朝鲜之次日，中央政治局常委决定将学运定性为“动乱”[113]:169。4月26日，《人民日报》根据这个决定之精神发表《必须旗帜鲜明地反对动乱》之社论[113]:169[160]。然而令邓失望，结果适得其反，学生领袖非但没有退缩，反而愈发坚定，并且动员更多学生加入他们行列[28]:541。据称将这次风波定性为动乱是邓的决定[161]:42-43，也有人认为邓受到当时向他报告事件动态的高层领导人（指总理李鹏等中央领导和陈希同等北京市领导）的影响[162]:365。5月13日，数千北京学生藉苏联改革派领袖戈尔巴乔夫快将访华到天安门广场绝食，借此行动向中央施压，以争取成立压力团体；尽管赵紫阳劝说学生必须克制，以免破坏中苏高峰会议之进行，学生情绪却转趋激烈，并否定所有妥协之主张[113]:169。由于互不信任和缺乏理性，学生和官方的失败互动使之走向不可控制的局面[61]:302-308。5月15日，戈尔巴乔夫抵达北京；5月16日，赵紫阳与戈尔巴乔夫会晤时公开表示：“在最重要的问题上，仍然需要邓小平同志掌舵”；5月17日，北京爆发百多万人上街声援绝食之大游行，不少人将矛头直指邓[113]:170。在邓的首肯下，中共中央决定以武力镇压[163]。6月3日下午乔石召开紧急会议研究清场之最后方案；杨尚昆把方案交给邓，立刻得到批准；即使开始使用真枪实弹，以致命武器对付同胞，部队仍然用大约4个小时，才走完从木樨地到天安门十约4英哩路程[28]:561-562，即震惊中外的“六四事件”[34]:3。邓提出“冷静观察、稳住阵脚、沉着应付、韬光养晦”之“十六字方针”，带领中共渡过难关[113]:170。\n" +
                        "\n" +
                        "6月9日，邓接见首都戒严部队军以上干部，指出“这场风波迟早要来。这是国际的大气候和中国自己的小气候所决定了的，是一定要来的……而现在来，对我们比较有利。最有利的是，我们有一大批老同志健在……他们是支持对暴乱采取坚决行动的。虽然有一些同志一时还不理解，但最终是会理解的，会支持中央这个决定的。”[113]:170-171邓称：“改革开放这个基本点……没有错。没有改革开放，怎么会有今天？……以后我们怎么办？我说，我们原来制定的基本路线、方针、政策，照样干下去，坚定不移地干下去。”[113]:171[61]:302-308。据悉，正当邓考虑由谁来接替赵紫阳时，李先念和陈云一再向邓推荐上海市领导人江泽民，说江是坚持“两个基本点”之好干部，力主调到中央；邓很快接纳二人建议[113]:171。6月23至24日，中共中央召开十三届四中全会，议决撤销赵紫阳所有职务[113]:171；选举江泽民为中国共产党中央委员会总书记[164]。7月28日，中共中央、国务院决定惩治腐败，从国务院所属公司做起，坚决制止高干子女经商[165][166]。\n" +
                        "\n" +
                        "由于赵紫阳同情“六四民运”，结果被撤销总书记职务[27]:22。六四事件导致邓小平的另一个接班人赵紫阳（以及据说是原定接任赵紫阳的政治局常委胡启立）下台，赵此后一直被软禁，直至2005年去世[167]。邓决定不在现有的北京高层中选择一名接班人，而是从上海召来当时的市委书记江泽民任中共中央总书记[61]:301。从此江泽民被确认为中共第三代领导集体核心[61]:309-314。5月31日，邓对新的中央领导班子做了政治交代：“第一，要改换领导层。新的领导机构要使人民感到面貌一新，感到是一个实行改革的有希望的领导班子。这是最重要的一条。这是向人民亮相啊！”、“如果我们摆一个阵容，使人民感到是一个僵化的班子，保守的班子，或者人民认为是个平平庸庸体现不出中国前途的班子，将来闹事的情形就还会很多很多，那就真正要永无宁日。”、“第二，要扎扎实实地做几件事情，体现出我们是真正反对腐败，不是假的。”、“对腐败的现象我也很不满意啊！”、“腐败的事情，一抓就能抓到重要案件，就是我们往往下不了手。这就会丧失人心，使人们以为我们在包庇腐败。这个关我们必须过，要兑现。”、“希望大家能够很好地以江泽民同志为核心，很好地团结。只要这个领导集体是团结的，坚持改革开放的，即使是平平稳稳地发展几十年，中国也会发生根本的变化。”[61]:296-301[168]不久邓小平又将年轻的胡锦涛提升成为中共中央政治局常委和中共中央书记处书记[169]:11,24，胡锦涛常被认为是邓为江泽民安排的继任者[170]:238[171]:91。\n" +
                        "\n" +
                        "1989年9月4日，邓请辞中国共产党中央军事委员会主席职务[61]:322-323。9月16日，邓在会见美籍华裔学者李政道教授时谈到：“过去两个总书记都没有站住，并不是选的时候不合格。”[113]:17111月8日，邓在十三届五中全会上宣布退休[27]:22。11月9日，中共十三届五中全会同意邓辞去中共中央军委主席职务[172]。1990年3月19日，邓辞去中华人民共和国中央军事委员会主席。但他仍是中共精神领袖[27]:22。\n" +
                        "\n" +
                        "九二南方考察（南巡）\n" +
                        "\n" +
                        "邓小平南巡的时候所乘坐的军舰\n" +
                        "参见：邓小平南巡、四项基本原则、中国共产党第十四次全国代表大会和社会主义市场经济\n" +
                        "Wikisource-logo.svg\t您可以在维基文库中查找此百科条目的相关原始文献：\n" +
                        "告全党全军全国各族人民书/1997年\n" +
                        "在邓小平同志追悼大会上的悼词\n" +
                        "六四事件后的中国形势十分严峻。在国际上被孤立，西方国家缩紧对中国的高科技出口，并延长本国的中国留学生滞留期限[125]:10；在中共内部则有“保守”势力抬头，他们的纲领是“反自由化，反和平演变”。邓指出，东欧共产政权崩溃与苏联解体，基本上是因为它们推行经济改革失败，所以，中国若要避免遭同一命运，必须继续走改革开放之道路[113]:172。1992年春夏，保守派借毛泽东《在延安文艺座谈会上的讲话》发表50周年之际，在全国范围组织了一系列高规格的纪念活动。“左”的势力在“要分清两种改革开放观”的旗号下，试图把中国拉回到文革前，借政治运动来解决国内的重重矛盾[173]。1992年秋，要开中共十四大；如果左派的政治主张在十四大占了上风，邓的改革开放便会付之东流[174]:11。\n" +
                        "\n" +
                        "当邓之专列于1992年1月17日驶离北京站时，北京其他领导人和南方负责接待他之干部只知道，邓夫妇和4名子女（邓质方没有随行）及其配偶和孩子，一行17人，要出门散心观光，进行“家庭度假”[28]:597。1992年春，邓考察武昌、广州、深圳、珠海与上海[28]:598-605[175]。依靠昔日的威望，邓以普通党员的身份在考察途中发表了一系列的演讲，他强调了经济建设的重要性[61]:306-307，批评那些怀疑改革开放的人，明确表示“左”的东西对中国而言比“右”更可怕[61]:225。邓还特地指出当前的基本任务是防“左”：“现在，有右的东西影响我们，也有‘左’的东西影响我们，但根深蒂固的还是‘左’的东西。……右可以葬送社会主义，‘左’也可以葬送社会主义。中国要警惕右，但主要是防止‘左’。……把改革开放说成是引进和发展资本主义，认为和平演变的主要危险来自经济领域，这些就是‘左’。”[113]:172-173“南巡”期间，邓提出了社会主义市场经济的问题，他说：“市场经济不等于资本主义，社会主义也有市场”[61]:373，“计划多一点还是市场多一点，不是社会主义与资本主义的本质区别。计划经济不等于社会主义，资本主义也有计划；市场经济不等于资本主义，社会主义也有市场。计划和市场都是经济手段。”[113]:172。他的南巡与演讲使得中国重新步入改革开放的轨道[176]。由于各地传媒纷纷发表支持改革开放，而与邓一起南巡之杨尚昆又在军中展开学习邓之南巡讲话，中共中央遂于1992年2月底整理南巡讲话要点，以中共中央1992年2号文件下发全体当员，由此结束历时3年半之“治理整顿”，并掀起新一轮之经济热潮[113]:173。\n" +
                        "\n");
        System.out.println("待检测语句字数：" + string.length());
        long beginTime = System.currentTimeMillis();
        Set<String> set = BadWordUtil.getBadWord(string.toString(), 2);
        String cleanString = replaceBadWord(string.toString(), 2, "**");
        long endTime = System.currentTimeMillis();
        System.out.println("语句中包含敏感词的个数为：" + set.size() + "。包含：" + set);
        System.out.println("过滤后的语句为：" + cleanString);
        System.out.println("总共消耗时间为：" + (endTime - beginTime));
    }
}